package in.rob.client.fragment;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.Toast;
import in.controller.handler.AuthenticationHandler;
import in.controller.handler.UserResponseHandler;
import in.controller.handler.base.ResponseListener;
import in.lib.Constants;
import in.lib.manager.APIManager;
import in.lib.manager.ResponseManager;
import in.lib.manager.UserManager;
import in.lib.utils.ADNPassportUtility;
import in.lib.utils.Views;
import in.lib.utils.Views.InjectView;
import in.lib.utils.Views.Injectable;
import in.lib.utils.Views.OnClick;
import in.model.User;
import in.rob.client.MainActivity;
import in.rob.client.R;
import in.rob.client.fragment.base.BaseFragment;
@Injectable
public class AuthenticationFragment extends BaseFragment implements ResponseListener<User>
{
@InjectView private EditText username;
@InjectView private EditText password;
private ProgressDialog dialog;
private final BroadcastReceiver installReceiver = new BroadcastReceiver()
{
@Override public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
String dataString = intent.getDataString();
if (Intent.ACTION_PACKAGE_ADDED.equals(action) && dataString.equals(String.format("package:%s", ADNPassportUtility.APP_PACKAGE)))
{
onAdnLoginClick(null);
}
}
};
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.authentication_layout, container, false);
Views.inject(this, view);
return view;
}
@Override public void onAttach(Activity activity)
{
super.onAttach(activity);
dialog = new ProgressDialog(getContext());
dialog.setMessage(getString(R.string.logging_in));
dialog.setCanceledOnTouchOutside(false);
if (ResponseManager.getInstance().getResponse(getResponseKeys()[0]) != null)
{
dialog.show();
}
}
@Override public void onDestroy()
{
super.onDestroy();
try
{
getActivity().unregisterReceiver(installReceiver);
}
catch (Exception e){}
}
@Override public void onDetach()
{
super.onDetach();
if (dialog != null)
{
dialog.dismiss();
dialog = null;
}
}
@OnClick public void onAdnLoginClick(View view)
{
if (ADNPassportUtility.isPassportAuthorizationAvailable(getContext()))
{
Intent authorizationIntent = ADNPassportUtility.getAuthorizationIntent(Constants.CLIENT_TOKEN, Constants.API_SCOPES_CSV);
getActivity().startActivityForResult(authorizationIntent, Constants.REQUEST_CODE_AUTHORIZE);
}
else
{
ADNPassportUtility.launchPassportInstallation(getContext());
IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
filter.addDataScheme("package");
getActivity().registerReceiver(installReceiver, filter);
}
}
@OnClick public void onLoginClick(View view)
{
String username = this.username.getText().toString();
String password = this.password.getText().toString();
AuthenticationHandler response = new AuthenticationHandler();
ResponseManager.getInstance().addResponse(getResponseKeys()[0], response, this);
APIManager.getInstance().authenticate(username, password, response);
dialog.show();
}
@Override public void handleResponse(User user)
{
if (dialog != null)
{
dialog.dismiss();
dialog = null;
}
if (user != null)
{
if (!TextUtils.isEmpty(UserManager.getInstance().getAccessToken()))
{
UserManager.getInstance().setUser(user, UserManager.getInstance().getAccessToken());
}
else if (!TextUtils.isEmpty(user.getToken()))
{
UserManager.getInstance().setUser(user, user.getToken());
}
user.save();
if (getArguments() == null || (getArguments() != null && !getArguments().containsKey(Constants.EXTRA_FINISH)))
{
Intent main = new Intent(getActivity(), MainActivity.class);
startActivity(main);
}
getActivity().finish();
}
}
public void handleFailure(String slug, String errorText)
{
if (dialog != null)
{
dialog.dismiss();
}
if (slug.equals("invalid_grant"))
{
Toast.makeText(getContext(), errorText, Toast.LENGTH_SHORT).show();
}
}
@Override public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == Constants.REQUEST_CODE_AUTHORIZE)
{
if (resultCode == Activity.RESULT_OK)
{
String username = data.getStringExtra("username");
String accessToken = data.getStringExtra("accessToken");
String userId = data.getStringExtra("userId");
UserManager.getInstance().setAccessToken(accessToken);
UserResponseHandler response = new UserResponseHandler();
ResponseManager.getInstance().addResponse(getResponseKeys()[0], response, this);
APIManager.getInstance().getUser(userId, accessToken, response);
dialog.show();
}
}
}
@Override public String[] getResponseKeys()
{
return new String[]{"auth"};
}
}